import java.util.Scanner;
// 定义一个循环队列类
class CircularQueue {
    private int[] queue;   // 存储队列元素的数组
    private int front;  // 队列头指针
    private int rear;   // 队列尾指针
    private int length;  // 队列的最大长度
    // 构造函数，初始化队列的大小
    public CircularQueue(int length) {
        this.length = length;
        this.queue = new int[length];
        this.front = 0;
        this.rear = 0; // 初始化时rear等于front
    }
    // 判断队列是否已满
    public boolean isFull() {
        return (rear + 1) % length == front;
    }
    // 判断队列是否为空
    public boolean isEmpty() {
        return front == rear;
    }
    // 入队操作
    public void enqueue(int data) {
        if (isFull()) {
            System.out.println("队列已满");
            return;
        }
        queue[rear] = data;
        rear = (rear + 1) % length;
        System.out.println("入队成功");
    }
    // 出队操作
    public void dequeue() {
        if (isEmpty()) {
            System.out.println("队列为空");
            return;
        }
        front = (front + 1) % length;
        System.out.println("出队成功");
    }
    // 查看队首元素
    public int peek() {
        if (isEmpty()) {
            System.out.println("队列为空");
            return -1;
        }
        return queue[front];
    }
    // 打印队列中的所有元素
    public void printQueue() {
        if (isEmpty()) {
            System.out.println("队列为空");
            return;
        }
        System.out.print("队列当前元素值: ");
        if (front < rear) {
            for (int i = front; i < rear; i++) {
                System.out.print(queue[i] + " ");
            }
        } else {
            for (int i = front; i < length; i++) {
                System.out.print(queue[i] + " ");
            }
            for (int i = 0; i < rear; i++) {
                System.out.print(queue[i] + " ");
            }
        }
        System.out.println();
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入循环队列的大小:");
        int length = sc.nextInt();
        CircularQueue queue = new CircularQueue(length);
        while (true) {
            System.out.println("请输入操作类型（1: 入队, 2: 出队, -1: 结束操作）:");
            int work = sc.nextInt(); // 读取用户输入的操作类型
            if (work == -1) { // 如果输入-1，结束操作
                break;
            } else if (work == 1) { // 如果输入1，进行入队操作
                System.out.println("请输入入队列的元素值（输入-1结束入队）:");
                while (true) {
                    int data = sc.nextInt(); // 读取用户输入的元素
                    if (data == -1) { // 如果输入-1，结束入队操作
                        break;
                    }
                    queue.enqueue(data); // 将元素入队
                    queue.printQueue(); // 打印当前队列元素
                }
            } else if (work == 2) { // 如果输入2，进行出队操作
                queue.dequeue(); // 将元素出队
                queue.printQueue(); // 打印当前队列元素
            } else {
                System.out.println("无效的操作，请输入1, 2 或 -1");
            }
        }
        if (!queue.isEmpty()) {
            System.out.println("当前队列首元素为: " + queue.peek());
        } else {
            System.out.println("队列为空");
        }
        sc.close();
    }
}
